// 权限控制器
const bcrypt = require('bcryptjs');
const jwt = require('jsonwebtoken');
const db = require('../config/db');

// @desc    注册新用户
// @route   POST /api/auth/register
// @access  Public
const registerUser = async (req, res) => {
  const { username, email, password } = req.body;

  if (!username || !email || !password) {
    return res.status(400).json({ message: '请提供所有必填字段' });
  }

  try {
    // 检查数据库中是否已有用户（限制只能注册一个用户）
    const [allUsers] = await db.query('SELECT COUNT(*) as userCount FROM users');
    if (allUsers[0].userCount > 0) {
      return res.status(403).json({ message: '系统已存在用户，不允许注册新用户' });
    }

    // 检查用户或邮箱是否已存在
    const [existingUser] = await db.query('SELECT * FROM users WHERE username = ? OR email = ?', [username, email]);
    if (existingUser.length > 0) {
      return res.status(409).json({ message: '用户名或邮箱已存在' });
    }

    // 哈希密码
    const salt = await bcrypt.genSalt(10);
    const hashedPassword = await bcrypt.hash(password, salt);

    // 存入数据库
    const [result] = await db.query('INSERT INTO users (username, email, password) VALUES (?, ?, ?)', [username, email, hashedPassword]);
    const insertId = result.insertId;

    // 查询新创建的用户信息（不含密码）
    const [newUser] = await db.query('SELECT id, username, email, created_at FROM users WHERE id = ?', [insertId]);

    res.status(201).json({
      message: '用户注册成功',
      user: newUser[0]
    });

  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '注册过程中服务器出错' });
  }
};

// @desc    用户登录并获取 token
// @route   POST /api/auth/login
// @access  Public
const loginUser = async (req, res) => {
  const { username, password } = req.body;

  if (!username || !password) {
    return res.status(400).json({ message: '请提供用户名和密码' });
  }

  try {
    const [users] = await db.query('SELECT * FROM users WHERE username = ?', [username]);

    if (users.length === 0) {
      return res.status(401).json({ message: '凭证无效' });
    }

    const user = users[0];

    // 比较密码
    const isMatch = await bcrypt.compare(password, user.password);

    if (!isMatch) {
      return res.status(401).json({ message: '凭证无效' });
    }

    // 创建 JWT
    const token = jwt.sign({ id: user.id }, process.env.JWT_SECRET, {
      expiresIn: process.env.JWT_EXPIRES_IN,
    });
    
    // 移除响应中的密码
    delete user.password;

    res.json({
      message: '登录成功',
      token,
      user
    });

  } catch (error) {
    console.error(error);
    res.status(500).json({ message: '登录过程中服务器出错' });
  }
};

// @desc    获取当前登录用户信息
// @route   GET /api/auth/me
// @access  Private
const getMe = (req, res) => {
    // req.user 来自 authMiddleware
    res.json(req.user);
};


module.exports = {
  registerUser,
  loginUser,
  getMe
};